package org.example;

import org.example.disk.DiskException;
import org.example.disk.Disk;
import org.example.fat.FAT;

/**
 * 程序主入口类
 */
public class Main {
    public static void main(String[] args) {
        FileSystem fileSystem = new FileSystem();

        try {
            // 初始化文件系统(创建新的)
            fileSystem.initialize("DISK", true);

            // 这里可以添加测试代码
            testBasicOperations(fileSystem);

            // 正常关闭文件系统
            fileSystem.shutdown();

        } catch (DiskException e) {
            System.err.println("系统错误: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 测试基本操作
     * @param fileSystem 文件系统实例
     */
    private static void testBasicOperations(FileSystem fileSystem) throws DiskException {
        // 测试磁盘读写
        byte[] testData = new byte[Disk.BLOCK_SIZE];
        for (int i = 0; i < testData.length; i++) {
            testData[i] = (byte) i;
        }

        // 写入测试数据到块10
        fileSystem.getDisk().writeBlock(10, testData);

        // 读取并验证
        byte[] readData = new byte[Disk.BLOCK_SIZE];
        fileSystem.getDisk().readBlock(10, readData);

        // 简单验证数据一致性
        boolean dataMatch = true;
        for (int i = 0; i < testData.length; i++) {
            if (testData[i] != readData[i]) {
                dataMatch = false;
                break;
            }
        }

        System.out.println("磁盘读写测试: " + (dataMatch ? "通过" : "失败"));

        // 测试FAT操作
        int allocatedBlock = fileSystem.getFat().allocateBlock();
        System.out.println("分配到的块号: " + allocatedBlock);

        if (allocatedBlock != -1) {
            System.out.println("分配前块状态: " + fileSystem.getFat().getFatEntry(allocatedBlock));
            fileSystem.getFat().setNextBlock(allocatedBlock, FAT.EOF);
            System.out.println("设置后块状态: " + fileSystem.getFat().getFatEntry(allocatedBlock));

            fileSystem.getFat().freeBlock(allocatedBlock);
            System.out.println("释放后块状态: " + fileSystem.getFat().getFatEntry(allocatedBlock));
        }
    }
}